﻿
using DAL;
using HealthRooms.DataBaseOPerate.oductDataToDJ;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.IO;
using System.Windows.Forms;

namespace MainOP
{
    public partial class FormDataSelectelEctricity : Form
    {
        public FormDataSelectelEctricity()
        {
            InitializeComponent();
        }
        List<oductDataToDJModel> objProductData = new List<oductDataToDJModel>();
        private void button1_Click(object sender, EventArgs e)
        {
            //查询前先清空数据集
            objProductData.Clear();
            //清空表格再查询
            while (this.dataGridView1.Rows.Count != 0)
            {
                this.dataGridView1.DataSource = null;
            }
            string sql = "SELECT [产品下线时间],[总成码],[托盘号],[完成时间], [测试时间], A.[产品型号], A.[ID], [操作员], B.[内部码], [电检结果], [鼓风机一档电压], [鼓风机二档电压], [鼓风机三档电压], [鼓风机四档电压], [鼓风机一档电流], [鼓风机二档电流], [鼓风机三档电流], [鼓风机四档电流], [鼓风机一档振动], [鼓风机二档振动], [鼓风机三档振动], [鼓风机四档振动], [鼓风机一档噪音], [鼓风机二档噪音], [鼓风机三档噪音], [鼓风机四档噪音], [左模式-吹面电压], [左模式-吹面电流], [右模式-吹面电压], [右模式-吹面电流], [后模式-吹面电压], [后模式-吹面电流], [左温度-全冷电压], [左温度-全冷电流], [右温度-全冷电压], [右温度-全冷电流], [后温度-全冷电压], [后温度-全冷电流], [循环-内循环电压], [循环-内循环电流], [左模式-吹脚电压], [左模式-吹脚电流], [右模式-吹脚电压], [右模式-吹脚电流], [后模式-吹脚电压], [后模式-吹脚电流], [左温度-全热电压], [左温度-全热电流], [右温度-全热电压], [右温度-全热电流], [后温度-全热电压], [后温度-全热电流], [循环-外循环电压], [循环-外循环电流], [左模式-除霜电压], [左模式-除霜电流], [右模式-除霜电压], [右模式-除霜电流], [后模式-除霜电压], [后模式-除霜电流], [左模式-出厂电压], [左模式-出厂电流], [右模式-出厂电压], [右模式-出厂电流], [后模式-出厂电压], [后模式-出厂电流], [吹面-左吹面风速], [吹面-右吹面风速], [吹面-除霜风速], [吹面-后吹面风速], [吹脚-左吹面风速], [吹脚-右吹面风速], [吹脚-除霜风速], [吹脚-后吹面风速], [除霜-左吹面风速], [除霜-右吹面风速], [除霜-除霜风速], [除霜-后吹面风速], [风速测试占空比], [左吹面温度], [左吹脚温度], [右吹面温度], [右吹脚温度], [后吹面温度], [后吹脚温度], [蒸发器温度], [AQS] FROM OPENROWSET('SQLOLEDB','172.16.150.1';'sa';'943937821',MainData.dbo.productDataToDJ) A JOIN OPENROWSET('SQLOLEDB','172.16.150.1'; 'sa'; '943937821',MainData.dbo.productData) B ON A.ID = B.ID where A.ID = B.ID and A.[产品型号] = 'DIDI' and [产品下线时间] Between '" + dateTimePicker1.Text + "' and '" + dateTimePicker2.Text + "' order by[产品下线时间] ASC";
            //string sql = "SELECT [产品下线时间],[总成码],[托盘号],[完成时间], [测试时间], A.[产品型号], A.[ID], [操作员], B.[内部码], [电检结果], [鼓风机一档电压], [鼓风机二档电压], [鼓风机三档电压], [鼓风机四档电压], [鼓风机一档电流], [鼓风机二档电流], [鼓风机三档电流], [鼓风机四档电流], [鼓风机一档振动], [鼓风机二档振动], [鼓风机三档振动], [鼓风机四档振动], [鼓风机一档噪音], [鼓风机二档噪音], [鼓风机三档噪音], [鼓风机四档噪音], [左模式-吹面电压], [左模式-吹面电流], [右模式-吹面电压], [右模式-吹面电流], [后模式-吹面电压], [后模式-吹面电流], [左温度-全冷电压], [左温度-全冷电流], [左模式-吹脚电压], [左模式-吹脚电流], [右模式-吹脚电压], [右模式-吹脚电流], [后模式-吹脚电压], [后模式-吹脚电流], [左温度-全热电压], [左温度-全热电流], [左模式-除霜电压], [左模式-除霜电流], [右模式-除霜电压], [右模式-除霜电流], [后模式-除霜电压], [后模式-除霜电流], [左模式-出厂电压], [左模式-出厂电流], [吹面-左吹面风速], [吹面-右吹面风速], [吹面-除霜风速], [左吹面温度], [左吹脚温度], [右吹面温度] FROM OPENROWSET('SQLOLEDB','172.16.150.1';'sa';'943937821',MainData.dbo.productDataToDJ) A JOIN OPENROWSET('SQLOLEDB','172.16.150.1'; 'sa'; '943937821',MainData.dbo.productData) B ON A.ID = B.ID where A.ID = B.ID and A.[产品型号] = 'DIDI' and [产品下线时间] Between '" + dateTimePicker1.Text + "' and '" + dateTimePicker2.Text + "' order by[产品下线时间] ASC";
            objProductData = oductDataToDJFunc.GetData(sql, true);
            dataGridView1.AutoGenerateColumns = true;
            dataGridView1.DataSource = objProductData;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //查询前先清空数据集
            objProductData.Clear();
            //清空表格再查询
            while (this.dataGridView1.Rows.Count != 0)
            {
                this.dataGridView1.DataSource = null;
            }
            //oductDataToDJFunc oductDataToDJFunc = new oductDataToDJFunc();
            if (comboBox1.Text != "")
            {
                string sql = "SELECT [产品下线时间],[产品型号],[总成码],[托盘号],[testDoneDate], [typeName], [serialNumber], [操作员], A.[总结果], [模式吹面电压], [模式吹面角度], [吹面模式吹面风速], [吹面模式除霜风速], [吹面模式中吹面风速], [吹面模式后吹面风速], [吹面模式后吹脚风速], [模式吹面结果], [模式吹脚电压], [模式吹脚角度], [吹脚模式吹面风速], [吹脚模式除霜风速], [吹脚模式中吹面风速], [吹脚模式后吹面风速], [吹脚模式后吹脚风速], [模式吹脚结果], [模式除霜电压], [模式除霜角度], [除霜模式吹面风速], [除霜模式除霜风速], [除霜模式中吹面风速], [除霜模式后吹面风速], [除霜模式后吹脚风速], [模式除霜结果], [模式出厂电压], [模式出厂角度], [模式出厂结果], [分隔吹面角度], [分隔吹面结果], [分隔吹脚角度], [分隔吹脚结果], [分隔除霜角度], [分隔除霜结果], [分隔出厂角度], [分隔出厂结果], [后风门吹面角度], [后风门吹面结果], [后风门吹脚角度], [后风门吹脚结果], [后风门除霜角度], [后风门除霜结果], [后风门出厂角度], [后风门出厂结果], [后吹面吹面角度], [后吹面吹面结果], [后吹面吹脚角度], [后吹面吹脚结果], [后吹面除霜角度], [后吹面除霜结果], [后吹面出厂角度], [后吹面出厂结果], [后吹脚吹面角度], [后吹脚吹面结果], [后吹脚吹脚角度], [后吹脚吹脚结果], [后吹脚除霜角度], [后吹脚除霜结果], [后吹脚出厂角度], [后吹脚出厂结果], [前风门吹面电压], [前风门吹面角度], [前风门吹面结果], [前风门吹脚电压], [前风门吹脚角度], [前风门吹脚结果], [前风门除霜电压], [前风门除霜角度], [前风门除霜结果], [前风门出厂电压], [前风门出厂角度], [前风门出厂结果], [后吹面温度], [后吹脚温度], [左吹面温度], [左吹脚温度], [右吹面温度], [右吹脚温度], [蒸发器温度], [CCU软件版本号], [CCU硬件版本号], [PTC软件版本号], [PTC硬件版本号], [CAN1结果], [CAN2结果], [LIN结果], [PTC通讯结果], [CCU标定结果],[NVH结果] FROM OPENROWSET('SQLOLEDB','192.168.1.160';'sa';'943937821',GEMINI.dbo.productDataToDJ) A JOIN OPENROWSET('SQLOLEDB','192.168.1.150'; 'sa'; '943937821',GEMINI.dbo.productData) B ON A.serialNumber = B.ID where " + comboBox1.Text + "='" + textBox1.Text + "' order by[产品下线时间] ASC";
                objProductData = oductDataToDJFunc.GetData(sql, true);
            }
            else
            {
                string sql = "SELECT [产品下线时间],[产品型号],[总成码],[托盘号],[testDoneDate], [typeName], [serialNumber], [操作员], A.总结果, [模式吹面电压], [模式吹面角度], [吹面模式吹面风速], [吹面模式除霜风速], [吹面模式中吹面风速], [吹面模式后吹面风速], [吹面模式后吹脚风速], [模式吹面结果], [模式吹脚电压], [模式吹脚角度], [吹脚模式吹面风速], [吹脚模式除霜风速], [吹脚模式中吹面风速], [吹脚模式后吹面风速], [吹脚模式后吹脚风速], [模式吹脚结果], [模式除霜电压], [模式除霜角度], [除霜模式吹面风速], [除霜模式除霜风速], [除霜模式中吹面风速], [除霜模式后吹面风速], [除霜模式后吹脚风速], [模式除霜结果], [模式出厂电压], [模式出厂角度], [模式出厂结果], [分隔吹面角度], [分隔吹面结果], [分隔吹脚角度], [分隔吹脚结果], [分隔除霜角度], [分隔除霜结果], [分隔出厂角度], [分隔出厂结果], [后风门吹面角度], [后风门吹面结果], [后风门吹脚角度], [后风门吹脚结果], [后风门除霜角度], [后风门除霜结果], [后风门出厂角度], [后风门出厂结果], [后吹面吹面角度], [后吹面吹面结果], [后吹面吹脚角度], [后吹面吹脚结果], [后吹面除霜角度], [后吹面除霜结果], [后吹面出厂角度], [后吹面出厂结果], [后吹脚吹面角度], [后吹脚吹面结果], [后吹脚吹脚角度], [后吹脚吹脚结果], [后吹脚除霜角度], [后吹脚除霜结果], [后吹脚出厂角度], [后吹脚出厂结果], [前风门吹面电压], [前风门吹面角度], [前风门吹面结果], [前风门吹脚电压], [前风门吹脚角度], [前风门吹脚结果], [前风门除霜电压], [前风门除霜角度], [前风门除霜结果], [前风门出厂电压], [前风门出厂角度], [前风门出厂结果], [后吹面温度], [后吹脚温度], [左吹面温度], [左吹脚温度], [右吹面温度], [右吹脚温度], [蒸发器温度], [CCU软件版本号], [CCU硬件版本号], [PTC软件版本号], [PTC硬件版本号], [CAN1结果], [CAN2结果], [LIN结果], [PTC通讯结果], [CCU标定结果],[NVH结果] FROM OPENROWSET('SQLOLEDB','192.168.1.160';'sa';'943937821',GEMINI.dbo.productDataToDJ) A JOIN OPENROWSET('SQLOLEDB','192.168.1.150'; 'sa'; '943937821',GEMINI.dbo.productData) B ON A.serialNumber = B.ID where concat([产品下线时间],[产品型号],[总成码],[托盘号],[testDoneDate], [typeName], [serialNumber], [操作员], A.总结果, [模式吹面电压], [模式吹面角度], [吹面模式吹面风速], [吹面模式除霜风速], [吹面模式中吹面风速], [吹面模式后吹面风速], [吹面模式后吹脚风速], [模式吹面结果], [模式吹脚电压], [模式吹脚角度], [吹脚模式吹面风速], [吹脚模式除霜风速], [吹脚模式中吹面风速], [吹脚模式后吹面风速], [吹脚模式后吹脚风速], [模式吹脚结果], [模式除霜电压], [模式除霜角度], [除霜模式吹面风速], [除霜模式除霜风速], [除霜模式中吹面风速], [除霜模式后吹面风速], [除霜模式后吹脚风速], [模式除霜结果], [模式出厂电压], [模式出厂角度], [模式出厂结果], [分隔吹面角度], [分隔吹面结果], [分隔吹脚角度], [分隔吹脚结果], [分隔除霜角度], [分隔除霜结果], [分隔出厂角度], [分隔出厂结果], [后风门吹面角度], [后风门吹面结果], [后风门吹脚角度], [后风门吹脚结果], [后风门除霜角度], [后风门除霜结果], [后风门出厂角度], [后风门出厂结果], [后吹面吹面角度], [后吹面吹面结果], [后吹面吹脚角度], [后吹面吹脚结果], [后吹面除霜角度], [后吹面除霜结果], [后吹面出厂角度], [后吹面出厂结果], [后吹脚吹面角度], [后吹脚吹面结果], [后吹脚吹脚角度], [后吹脚吹脚结果], [后吹脚除霜角度], [后吹脚除霜结果], [后吹脚出厂角度], [后吹脚出厂结果], [前风门吹面电压], [前风门吹面角度], [前风门吹面结果], [前风门吹脚电压], [前风门吹脚角度], [前风门吹脚结果], [前风门除霜电压], [前风门除霜角度], [前风门除霜结果], [前风门出厂电压], [前风门出厂角度], [前风门出厂结果], [后吹面温度], [后吹脚温度], [左吹面温度], [左吹脚温度], [右吹面温度], [右吹脚温度], [蒸发器温度], [CCU软件版本号], [CCU硬件版本号], [PTC软件版本号], [PTC硬件版本号], [CAN1结果], [CAN2结果], [LIN结果], [PTC通讯结果], [CCU标定结果],[NVH结果]) like '%" + textBox1.Text + "%' order by[产品下线时间] ASC";
                objProductData = oductDataToDJFunc.GetData(sql, true);
            }

            this.dataGridView1.AutoGenerateColumns = false;
            this.dataGridView1.DataSource = objProductData;
        }
        //导出excel
        private void button3_Click(object sender, EventArgs e)
        {
            string fileName = "导出数据" + DateTime.Now.ToString("yyyyMMddHHmmss");//可以在这里设置默认文件名
            string saveFileName = "";//文件保存名
            SaveFileDialog saveDialog = new SaveFileDialog();//实例化文件对象
            saveDialog.DefaultExt = "xls";//文件默认扩展名
            saveDialog.Filter = "Excel文件|*.xls";//获取或设置当前文件名筛选器字符串，该字符串决定对话框的“另存为文件类型”或“文件类型”框中出现的选择内容。
            saveDialog.FileName = fileName;
            saveDialog.ShowDialog();//打开保存窗口给你选择路径和设置文件名
            saveFileName = saveDialog.FileName;
            if (saveFileName.IndexOf(":") < 0) return; //被点了取消
            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
            if (xlApp == null)
            {
                MessageBox.Show("无法创建Excel对象，您的电脑可能未安装Excel");
                return;
            }
            Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;//Workbooks代表一个 Microsoft Excel 工作簿
            Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);//新建一个工作表。 新工作表将成为活动工作表。
            Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1 
            Microsoft.Office.Interop.Excel.Range range = (Microsoft.Office.Interop.Excel.Range)xlApp.Cells;
            range.NumberFormat = "@";
            //写入标题             
            for (int i = 0; i < dataGridView1.Columns.Count; i++)//遍历循环获取DataGridView标题
            { worksheet.Cells[1, i + 1] = dataGridView1.Columns[i].Name; }// worksheet.Cells[1, i + 1]表示工作簿第一行第i+1列，Columns[i].HeaderText表示第i列的表头
            //写入数值
            for (int r = 0; r < dataGridView1.RowCount; r++)//这里表示数据的行标,dataGridView1.Rows.Count表示行数
            {
                for (int i = 0; i < dataGridView1.Columns.Count; i++)//遍历r行的列数
                {
                    worksheet.Cells[r + 2, i + 1] = dataGridView1.Rows[r].Cells[i].Value;//Cells[r + 2, i + 1]表示工作簿从第二行开始第一行保存为表头了，dataGridView1.Rows[r].Cells[i].Value获取列的r行i值
                }
                System.Windows.Forms.Application.DoEvents();//实时更新表格
            }
            worksheet.Columns.EntireColumn.AutoFit();//列宽自适应
            MessageBox.Show(fileName + "资料保存成功", "提示", MessageBoxButtons.OK);//提示保存成功
            if (saveFileName != "")//saveFileName保存文件名不为空
            {
                try
                {
                    workbook.Saved = true;//获取或设置一个值，该值指示工作簿自上次保存以来是否进行了更改
                    workbook.SaveCopyAs(saveFileName);  //fileSaved = true;将工作簿副本保存到文件中，但不修改内存中打开的工作簿                 
                }
                catch (Exception ex)
                {//fileSaved = false;                      
                    MessageBox.Show("导出文件时出错,文件可能正被打开！\n" + ex.Message);
                }
            }
            xlApp.Quit();
            GC.Collect();//强行销毁
        }

        List<string> cycCell = new List<string>();
        private void FormDataSelectelEctricity_Load(object sender, EventArgs e)
        {
            // TODO: 这行代码将数据加载到表“dianjian.productDataToDJ”中。您可以根据需要移动或删除它。
            //this.productDataToDJTableAdapter.Fill(this.dianjian.productDataToDJ);
            // TODO: 这行代码将数据加载到表“gEMINIDataSet.productDataToDJ”中。您可以根据需要移动或删除它。
            //this.productDataToDJTableAdapter.Fill(this.gEMINIDataSet.productDataToDJ);
            string sql = "select name from syscolumns where id = object_id(N'productDataToDJ') order by charindex(name, '[testDoneDate], [typeName], [serialNumber], [操作员], [总结果], [模式吹面电压], [模式吹面角度], [吹面模式吹面风速], [吹面模式除霜风速], [吹面模式中吹面风速], [吹面模式后吹面风速], [吹面模式后吹脚风速], [模式吹面结果], [模式吹脚电压], [模式吹脚角度], [吹脚模式吹面风速], [吹脚模式除霜风速], [吹脚模式中吹面风速], [吹脚模式后吹面风速], [吹脚模式后吹脚风速], [模式吹脚结果], [模式除霜电压], [模式除霜角度], [除霜模式吹面风速], [除霜模式除霜风速], [除霜模式中吹面风速], [除霜模式后吹面风速], [除霜模式后吹脚风速], [模式除霜结果], [模式出厂电压], [模式出厂角度], [模式出厂结果], [分隔吹面角度], [分隔吹面结果], [分隔吹脚角度], [分隔吹脚结果], [分隔除霜角度], [分隔除霜结果], [分隔出厂角度], [分隔出厂结果], [后风门吹面角度], [后风门吹面结果], [后风门吹脚角度], [后风门吹脚结果], [后风门除霜角度], [后风门除霜结果], [后风门出厂角度], [后风门出厂结果], [后吹面吹面角度], [后吹面吹面结果], [后吹面吹脚角度], [后吹面吹脚结果], [后吹面除霜角度], [后吹面除霜结果], [后吹面出厂角度], [后吹面出厂结果], [后吹脚吹面角度], [后吹脚吹面结果], [后吹脚吹脚角度], [后吹脚吹脚结果], [后吹脚除霜角度], [后吹脚除霜结果], [后吹脚出厂角度], [后吹脚出厂结果], [前风门吹面电压], [前风门吹面角度], [前风门吹面结果], [前风门吹脚电压], [前风门吹脚角度], [前风门吹脚结果], [前风门除霜电压], [前风门除霜角度], [前风门除霜结果], [前风门出厂电压], [前风门出厂角度], [前风门出厂结果], [后吹面温度], [后吹脚温度], [左吹面温度], [左吹脚温度], [右吹面温度], [右吹脚温度], [蒸发器温度], [CCU软件版本号], [CCU硬件版本号], [PTC软件版本号], [PTC硬件版本号], [CAN1结果], [CAN2结果], [LIN结果], [PTC通讯结果], [CCU标定结果],[NVH结果]')";
            SqlDataReader rowname = SqlHelper.GetReader(sql);
            comboBox1.Items.Add("产品下线时间");
            comboBox1.Items.Add("总成码");
            comboBox1.Items.Add("托盘号");
            cycCell.Add("产品下线时间");
            cycCell.Add("总成码");
            cycCell.Add("托盘号");
            while (rowname.Read())
            {
                comboBox1.Items.Add(rowname["name"].ToString());
                cycCell.Add(rowname["name"].ToString());
            }
            rowname.Close();
        }
    }
}
